//struct ListNode* reverseList(struct ListNode* head)
//{
//    if (head == NULL)
//    {
//        return NULL;
//    }
//    struct ListNode* n1, * n2, * n3;
//    n1 = NULL;
//    n2 = head;
//    n3 = head->next;
//    while (n2)
//    {
//        n2->next = n1;
//        n1 = n2;
//        n2 = n3;
//        if (n3)
//        {
//            n3 = n3->next;
//        }
//    }
//    return n1;
//}
//struct ListNode* prev1 = NULL;
//struct ListNode* phead = NULL;
//struct ListNode* phead1 = list2;
//struct ListNode* phead2 = list2;
//struct ListNode* prev2 = NULL;
//int m = 1;
//int n = 1;
//while (list1->next != NULL)
//{
//    m++;
//}
//while (list2->next != NULL)
//{
//    n++;
//}
//while (n <= m + n)
//{
//    if (list1->val >= list2->val)
//    {
//        if (list2->next == NULL)
//        {
//            list2->next = list1;
//            return phead;
//        }
//        prev2 = list2;
//        list2 = list2->next;
//        phead1 = list2;
//    }
//    else
//    {
//        if (phead1 == phead2)
//
//        {
//            phead = list2;
//        }
//        else
//        {
//            phead = list1;
//
//        }
//
//
//        prev1 = list1->next;
//        list1->next = list2;
//        prev2->next = list1;
//        list1 = prev1;
//        n++;
//    }
//}
//return phead;
//struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
//{
//    if (list1 == NULL) {
//        return list2;
//    }
//    if (list2 == NULL) {
//        return list1;
//    }
//
//    struct ListNode* mergedList;
//
//    if (list1->val <= list2->val) {
//        mergedList = list1;
//        mergedList->next = mergeTwoLists(list1->next, list2);
//    }
//    else {
//        mergedList = list2;
//        mergedList->next = mergeTwoLists(list1, list2->next);
//    }
//
//    return mergedList;
//
//}
//struct ListNode* reverseList(struct ListNode* head)
//{
//    if (head == NULL)
//    {
//        return NULL;
//    }
//    struct ListNode* n1, * n2, * n3;
//    n1 = NULL;
//    n2 = head;
//    n3 = head->next;
//    while (n2)
//    {
//        n2->next = n1;
//        n1 = n2;
//        n2 = n3;
//        if (n3)
//        {
//            n3 = n3->next;
//        }
//    }
//    return n1;
//}
//struct ListNode* detectCycle(struct ListNode* head) {
//    struct ListNode* slow = head;
//    struct ListNode* fast = head;
//
//    while (fast && fast->next)
//    {
//        slow = slow->next;
//        fast = fast->next->next;
//        if (slow == fast)
//        {
//            struct ListNode* meet = slow;
//            while (meet != head)
//            {
//
//                head = head->next;
//                meet = meet->next;
//            }
//            return meet;
//        }
//    }
//    return NULL;